package niuke.week01;

import java.util.Scanner;

/**
 *
 * 给定三个字符串str1、str2 和aim,
     * 如果aim包含且仅包含来自str1和str2的所有字符，
     * 而且在aim中属于str1的字符之间保持原来在str1中的顺序属于str2的字符之间保持原来在str2中的顺序，
    * 那么称aim是str1和str2的交错组成。
 * 实现一个函数，判断aim是否是str1和str2交错组成，如果是请输出“YES”，否则输出“NO”。
 */
public class StringJiaoCuo {


    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        String str1 = sc.next();
        String str2 = sc.next();
        String aim = sc.next();


        String  res = solution(str1,str2,aim);
        System.out.println(res);
    }

    public static String solution(String str1,String str2,String aim){
        int row =str1.length();
        int col =str2.length();

        if(row+col!=aim.length())
            return "NO";
        //    dp[i][j]  ---str1取长度为i  str2取长度为j 是否组成 aim长度为i+j
        int [][] dp = new int[row+1][col+1];

        dp[0][0] = 1;

        for(int i = 1;i<=row;i++){
            if(str1.substring(0,i).equals(aim.substring(0,i)))
                dp[i][0] = 1;
            else
                break;
        }


        for(int j = 1;j <=col;j ++){
            if(str2.substring(0,j).equals(aim.substring(0,j )))
                dp[0][j] = 1;
            else
                break;
        }


        //最后一个字符由str2提供  且     dp[i][j-1] =1
        // 最后一个字符由str1  且    dp[i-1][j] =1

        for(int i = 1;i<=row;i++){
            for(int j = 1;j <=col;j ++){   //str1.charAt(i-1)  长度为i的str1的最后一个字符
                if(aim.charAt(i+j-1)==str1.charAt(i-1) && dp[i-1][j]==1)
                    dp[i][j]=1;
                                        //str2.charAt(j-1)  长度为j的str2的最后一个字符
                if(aim.charAt(i+j-1)==str2.charAt(j-1) && dp[i][j-1]==1)
                    dp[i][j]=1;
            }
        }
        return dp[row][col]==1?"YES":"NO";
    }
}

